home *** CD-ROM | disk | FTP | other *** search
- /* SNMA to CED interface by MM $VER: 1.3
-
- Usage:
- - with OBJECT argument - assemble as o. linkable file
- - with DEBUG argument - assemble as executable with symbol data hunk
- - without argument (default) - assemble as normal executable
- */
-
- VARSAVE = "ENV:SNMA_Save.dir" /* directory of last assembled file */
- RECENT = "Actual:assem/SNMA_Recent.file" /* path of recently assembled source */
- SNMAL = "Utilities:Dock/Debug/SNMA" /* location of SNMA */
-
- OPTIONS RESULTS
- ADR = address()
-
- arg MODE
-
- retc=20
- temp=0
-
- SIGNAL ON SYNTAX
- SIGNAL ON BREAK_C
- SIGNAL ON HALT
-
- LOCKGUI
- STATUS RESTNAME
- FN=RESULT
- STATUS NUMCHANGES
- CI=RESULT
- IF FN = "" THEN SIGNAL .load
- STATUS FILENAME
- SN = RESULT
-
- .main:
- PUBS = "" /* set default pubscreen to empty string */
- STATUS PUBSCREENNAME
- IF RESULT = 0 THEN SIGNAL .skip
- PUBS=RESULT
-
- .skip:
- TAGZ='rt_pubscrname='PUBS 'rt_reqpos=reqpos_centerscr'
-
- IF SHOW('L',"rexxreqtools.library") THEN SIGNAL .lib_ok
- call addlib('rexxreqtools.library',0,-30,0)
-
- .lib_ok:
- IF EXISTS(VARSAVE) = ~0 THEN
- DO
- CALL OPEN(.dir, VARSAVE, 'R')
- SAVEDIR = readln(.dir)
- CALL CLOSE(.dir)
- END
- ELSE SAVEDIR = "T:" /* default directory for assembled files */
-
- IF CI > 0 THEN SIGNAL .save
-
- SUFIX=LASTPOS('.',FN)
- IF SUFIX = 0 THEN SIGNAL .req
- EXE=DELSTR(FN,SUFIX)
-
- .req:
- IF MODE = "OBJECT" THEN EXE=INSERT(EXE,'.o')
-
- .req2:
- FN2=rtfilerequest(SAVEDIR , EXE , "Save executable:", , TAGZ,)
- IF FN2 = "" THEN
- DO
- 'OKAY1 Assembling cancelled!' ; SIGNAL .exit
- END
-
- PATH = LASTPOS('/',FN2)
- IF PATH = 0 THEN PATH = INDEX(FN2,':')
- IF PATH = 0 THEN SIGNAL .exit
- PATH = PATH+1
- PATH = DELSTR(FN2,PATH)
-
- CALL OPEN(.dir, VARSAVE, 'W')
- CALL writeln(.dir, PATH)
- CALL CLOSE(.dir)
-
- ADDRESS COMMAND 'Run "'SNMAL'" AREXX PORTNAME SNMA<->CED'
- ADDRESS COMMAND 'SYS:Rexxc/WaitForPort SNMA<->CED'
- ADDRESS 'SNMA<->CED'
-
- 'SET OF=ON' /* enable msg output */
-
- /* if DEBUG arg present, assemble with debug info */
-
- IF MODE = "DEBUG" THEN 'SET S=ON'
-
- /* if OBJECT arg present, assemble as object linkable file */
-
- IF MODE = "OBJECT" THEN 'SET EXE=OFF S=ON'
- ELSE 'SET EXE=ON'
-
- 'ASM "'SN'" O "'FN2'"'
-
- INFO A
- IF A.ERRORS > 0 THEN
- DO
- GETERR STEM E
- ADDRESS VALUE ADR
- IF E.FILENAME = 'user macro' THEN
- DO
- 'OKAY1 Error in macro file 'E.FILENAME'' ; SIGNAL .out
- END
- JUMPTO E.LINENUM E.COLUMN
- 'OKAY1 'E.ERRNUM'/'A.ERRORS': "'E.ERRTXT'"'
- END
-
- .out:
- ADDRESS 'SNMA<->CED' QUIT
- /*IF temp ~= 0 THEN
- ADDRESS COMMAND 'DELETE "'temp'" QUIET'*/
- retc = 0 ; SIGNAL .exit
-
- .load:
- IF CI > 0 THEN SIGNAL .save
- IF EXISTS(RECENT) ~= 0 THEN
- DO
- CALL OPEN(.recent, RECENT, 'R')
- SN = readln(.recent)
- CALL CLOSE(.recent)
- IF EXISTS(SN) = ~0 THEN SIGNAL .load2
- 'OKAY1 ERROR!: Cannot locate source file "'SN'"'; SIGNAL .exit
-
- .load2:
- OPEN SN ; retc = 0 ; SIGNAL .exit
- END
- ELSE 'OKAY1 ERROR!: Recent file not found!' ; SIGNAL .exit
-
-
- .save:
- 'OKAY2 Source file not saved! Save it?'
- IF RESULT = 0 THEN SIGNAL .stemp
- SAVE
- IF RESULT = 0 THEN SIGNAL .save
- STATUS FILENAME
- SN = RESULT
- IF EXISTS(RECENT) = 0 THEN SIGNAL .write
- CALL OPEN(.recent, RECENT, 'R')
- RF = readln(.recent)
- CALL CLOSE(.recent)
- IF SN=RF THEN SIGNAL .skip2
- .write: CALL OPEN(.recent, RECENT, 'W')
- CALL writeln(.recent, SN)
- CALL CLOSE(.recent)
- .skip2:
- CI = 0
- STATUS RESTNAME
- FN = RESULT
- SIGNAL .main
-
- .stemp:
- temp=max(lastpos(':',SN),lastpos('/',SN))+1
- temp=substr(SN,temp)
- temp=insert('T:',temp)
- SAVE AS temp 1
- IF RESULT = 0 THEN SIGNAL .exit
- CI = 0
- SN=temp
- SIGNAL .main
-
- SYNTAX:
- .exit:
- halt:
- break_c:
- ADDRESS VALUE ADR
- 'UNLOCKGUI'
- TAB SIZE 7
- exit retc
-